<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>let 和const变量</title>
</head>
<body>
    <h1>let和const变量</h1>

    <p>let用来声明变量类似var 但是所有所有声明变量只有let变量所在的代码块有效</p>
<h2>let和var的区别</h2>
<table border="1px">
    <tr>
        <th>var声明变量</th>
    <th>let声明变量</th>
</tr>
    <tr>
        <td>如果没有声明var变量 能够提升为全局变量</td>
        <td>let声明变量 不能自动提升 且需要初始化</td>
    </tr>
     <tr>
        <td>var变量可以重复声明</td>
        <td>let变量不允许重复声明</td>
    </tr>
     <tr>
        <td>超出作用域范围  可以继续使用</td>
        <td>只能在作用域范围内有效</td>
    </tr>
</table>
<script>
    var a=12;
    a=23;
    var a= 'hello';//可以重复声明

    let b=10;
    b=22;
   // let b='hello'  不能重复声明

   let c;
   c=20;
   console.log(c);
   var d;
   console.log(d);
   
   function fun1(){
    var e=29;
    console.log(c);
    console.log(e);
    f=39;
    console.log(f);
    let g;
    console.log(g);
    
    
    
   }
   fun1();
   //console.log(e);局部变量
   console.log(f);//变量提升
   
   
</script>
<h2>const声明常量</h2>
<p>
    const声明常量 声明一个只读常量 一旦声明 变量的值不能改变
</p>
<ol>
    <li>声明变量 声明后不允许改变</li>
    <li>声明变量 声明后需要初始化</li>
    <li>超出作用域失效</li>
</ol>
<script>
   // const a; const修饰变量必须初始化
   const pi=3.14;
   //pi=2.164;//不允许修改pi的值 因为当前是只读状态
   console.log(pi);
   if (ture) {
    const min=20;
    
   }
   console.log(min);//作用域外失效
   const arr=[1,2,3]
arr.forEach(function(a){
    console.log(a);
    
})
arr.push(5);
console.log(arr);

</script>
</body>

</html>